import logging


class BaseACL(object):
    def __init__(self, **kwargs):
        super(BaseACL, self).__init__()
        # 角色有关的ACL
        self.role = kwargs.get("role")
        # 用户有关的ACL
        self.user = kwargs.get("user")
        # 上一层约束ACL（用户ACL的上一层是角色ACL）
        self.parent = kwargs.get("parent")

        self._logger = logging.getLogger(self.__class__.__name__)

    # 从字典中搜寻并返回或记录错误
    @classmethod
    def from_dict(cls, item):
        assert isinstance(item, dict)

        return cls(**item)

    def allows_packet(self, pkt, src_user):
        raise NotImplementedError()
